


import math
import torch
from torch import nn
import numpy as np






def autopad(k, p=None, d=1):  # kernel, padding, dilation
    """计算填充尺寸。如果有定义填充尺寸，就使用定义的填充。如果没有，返回填充尺寸，使得输出的特征图形状与输入一致（不考虑步长的情况下）。
    Args:
        k (_type_): 卷积核尺寸
        p (_type_, optional): 自定义填充尺寸，如果没有，为None. Defaults to None.
        d (int, optional): 卷积核扩张率. Defaults to 1.
    Returns:
        _type_: 填充尺寸
    """
    if d > 1:
        k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # actual kernel-size
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-pad
    return p









# 要有充分的测试函数





